<?php

/**
 * LIBRO actions.
 *
 * @package    OPENBIBLIOSOFT
 * @subpackage LIBRO
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
 */
class LIBROActions extends sfActions
{
	 /**
	  * Executes index action
	  *
	  * @param sfRequest $request A request object
	  */
	public function executeIndex(sfWebRequest $request)
	{
		if($this->getUser()->getAttribute('codigoUsuario') == null)
		{
			return  $this->renderText("<script type='text/javascript'> window.location = 'Entrada'; </script> ");
		}
	}
  
	public function executeListar()
	{
		$buscar = $this->getRequestParameter('Busqueda');
		$buscar = "%".$buscar."%";
		$campo = $this->getRequestParameter('Campo');
		
		$conexion = new Criteria();
		$conexion->addJoin(LibroPeer::CODIGOAREACONO, AreaconocimientoPeer::CODIGO);
		$conexion->addJoin(LibroPeer::CODIGOEDITORIAL, EditorialPeer::CODIGO);
		
		if($campo == 'Isbn'){ $conexion->add(LibroPeer::ISBN, $buscar, Criteria::LIKE);}
		if($campo == 'Titulo'){ $conexion->add(LibroPeer::TITULO, $buscar, Criteria::LIKE);}
		if($campo == 'AnoPublicacion'){ $conexion->add(LibroPeer::ANOPUBLICACION, $buscar, Criteria::LIKE);}
		if($campo == 'Idioma'){ $conexion->add(LibroPeer::IDIOMA, $buscar, Criteria::LIKE);}
		if($campo == 'AreaConocimiento'){ $conexion->add(LibroPeer::CODIGOAREACONO, $buscar, Criteria::LIKE);}
		if($campo == 'Editorial'){ $conexion->add(LibroPeer::CODIGOEDITORIAL, $buscar, Criteria::LIKE);}
		if($campo == 'PalabrasClave'){ $conexion->add(LibroPeer::PALABRASCLAVE, $buscar, Criteria::LIKE);}
		
		if($campo == 'Todos')
		{		
			$c1 = $conexion->getNewCriterion(LibroPeer::ISBN, $buscar, Criteria::LIKE);
			$c2 = $conexion->getNewCriterion(LibroPeer::TITULO, $buscar, Criteria::LIKE);
			$c3 = $conexion->getNewCriterion(LibroPeer::ANOPUBLICACION, $buscar, Criteria::LIKE);
			$c4 = $conexion->getNewCriterion(LibroPeer::IDIOMA, $buscar, Criteria::LIKE);
			$c5 = $conexion->getNewCriterion(LibroPeer::CODIGOAREACONO, $buscar, Criteria::LIKE);
			$c6 = $conexion->getNewCriterion(LibroPeer::CODIGOEDITORIAL, $buscar, Criteria::LIKE);
			$c7 = $conexion->getNewCriterion(LibroPeer::PALABRASCLAVE, $buscar, Criteria::LIKE);
			$c6->addOr($c7);
			$c5->addOr($c6);
			$c4->addOr($c5);
			$c3->addOr($c4);
			$c2->addOr($c3);
			$c1->addOr($c2);
			$conexion->add($c1);
		}
		
		$numeroLibros = LibroPeer::doCount($conexion);
		$conexion->setLimit($this->getRequestParameter('limit'));
		$conexion->setOffset($this->getRequestParameter('start'));
		$libros = LibroPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($libros As $temporal)
		{
			$datos[$pos]['libroIsbn']=$temporal->getIsbn();
			$datos[$pos]['libroTitulo']=$temporal->getTitulo();
			$datos[$pos]['libroAnoPublicacion']=$temporal->getAnopublicacion();
			$datos[$pos]['libroIdioma']=$temporal->getIdioma();
			$datos[$pos]['libroAreaConocimientoCodigo']=$temporal->getAreaconocimiento()->getCodigo();
			$datos[$pos]['libroAreaConocimientoNombre']=$temporal->getAreaconocimiento()->getNombre();
			$datos[$pos]['libroEditorialCodigo']=$temporal->getEditorial()->getCodigo();
			$datos[$pos]['libroEditorialNombre']=$temporal->getEditorial()->getNombre();
			$autoresNombres=null;
			$autoresCodigos=null;
			$palabrasClaveNombres=null;
			$palabrasClaveCodigos=null;
			$this->getAutores($temporal->getIsbn(), $autoresCodigos, $autoresNombres);
			$this->getPalabrasClave($temporal->getIsbn(), $palabrasClaveCodigos, $palabrasClaveNombres);
			$datos[$pos]['libroAutoresCodigos']=$autoresCodigos;
			$datos[$pos]['libroAutoresNombres']=$autoresNombres;
			$datos[$pos]['libroPalabrasClaveCodigos']=$palabrasClaveCodigos;
			$datos[$pos]['libroPalabrasClaveNombres']=$palabrasClaveNombres;
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroLibros.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function getAutores($isbn, &$autoresCodigos, &$autoresNombres)
	{
		$conexion = new Criteria();
		$conexion->add(LibroautorPeer::ISBN, $isbn);
		
		if($conexion)
		{
			$autores = LibroautorPeer::doSelect($conexion);
			foreach ($autores As $temporal)
			{
				$autoresCodigos.=$temporal->getAutor()->getCodigo().",";
				$autoresNombres.=$temporal->getAutor()->getPrimerapellido().", ".$temporal->getAutor()->getPrimernombre().". ";
			}
			if($autoresCodigos)
			{
				$autoresCodigos = substr($autoresCodigos, 0, -1);
			}
			if($autoresNombres)
			{
				$autoresNombres = substr($autoresNombres, 0, -2);
			}
		}
	}
	
	public function getPalabrasClave($isbn, &$palabrasClaveCodigos, &$palabrasClaveNombres)
	{
		$conexion = new Criteria();
		$conexion->add(PalabrasclavePeer::ISBN, $isbn);
		
		if($conexion)
		{
			$palabrasClave = PalabrasclavePeer::doSelect($conexion);
			foreach ($palabrasClave As $temporal)
			{
				$palabrasClaveCodigos.=$temporal->getPalabra()->getId().",";
				$palabrasClaveNombres.=$temporal->getPalabra()->getPalabra().", ";
			}
			if($palabrasClaveCodigos)
			{
				$palabrasClaveCodigos = substr($palabrasClaveCodigos, 0, -1);
			}
			if($palabrasClaveNombres)
			{
				$palabrasClaveNombres = substr($palabrasClaveNombres, 0, -2);
			}
		}
	}

	public function executeGuardar()
	{
		$autores = $this->getRequestParameter('Autores');
		if($autores != '')
		{
			$autores = explode(',', $autores);
		}
		
		$palabrasClave = $this->getRequestParameter('PalabrasClave');
		if($palabrasClave != '')
		{
			$palabrasClave = explode(',', $palabrasClave);
		}
		
		$libro = new Libro();
		$libro->setIsbn($this->getRequestParameter('Isbn'));
		$libro->setTitulo($this->getRequestParameter('Titulo'));
		$libro->setAnopublicacion($this->getRequestParameter('AnoPublicacion'));
		$libro->setIdioma($this->getRequestParameter('Idioma'));
		$libro->setCodigoareacono($this->getRequestParameter('AreaConocimiento'));
		$libro->setCodigoeditorial($this->getRequestParameter('Editorial'));
		//$libro->setPalabrasclave($this->getRequestParameter('PalabrasClave'));
		
		try
		{
			$libro->save();
			
			if($palabrasClave != '')
			{
				foreach($palabrasClave As $temporal)
				{
					$libroPalabraClave = new Palabrasclave();
					$libroPalabraClave->setIsbn($this->getRequestParameter('Isbn'));
					$libroPalabraClave->setIdpalabra($temporal);
					$libroPalabraClave->save();
				}
			}
			
			if($autores != '')
			{
				foreach($autores As $temporal)
				{
					$libroAutor = new Libroautor();
					$libroAutor->setIsbn($this->getRequestParameter('Isbn'));
					$libroAutor->setCodigoautor($temporal);
					$libroAutor->save();
				}
			}
		}
		catch (Exception $excepcionLibro)
		{
			return  $this->renderText("({success: false, errors: { reason: 'Exception: Hubo un problema creando el libro: ".$this->getRequestParameter('Nombre')."'}})");
		}
		return  $this->renderText("({success: true, mensaje:'El libro fue creado exitosamente'})");
	}

	public function executeActualizar()
	{
		$autores = $this->getRequestParameter('Autores');
		if($autores != '')
		{
			$autores = explode(',', $autores);
		}
		
		$palabrasClave = $this->getRequestParameter('PalabrasClave');
		if($palabrasClave != '')
		{
			$palabrasClave = explode(',', $palabrasClave);
		}
		
		$conexion = new Criteria();
		$conexion->add(LibroPeer::ISBN, $this->getRequestParameter('Isbn'));
		$libro = LibroPeer::doSelectOne($conexion);

		if($libro)
		{
				//$libro->setIsbn($this->getRequestParameter('Isbn'));
				$libro->setTitulo($this->getRequestParameter('Titulo'));
				$libro->setAnopublicacion($this->getRequestParameter('AnoPublicacion'));
				$libro->setIdioma($this->getRequestParameter('Idioma'));
				$libro->setCodigoareacono($this->getRequestParameter('AreaConocimiento'));
				$libro->setCodigoeditorial($this->getRequestParameter('Editorial'));
				//$libro->setPalabrasclave($this->getRequestParameter('PalabrasClave'));

				try
				{
					$libro->save();
					
					$conexion = new Criteria();
					$conexion->add(PalabrasclavePeer::ISBN, $this->getRequestParameter('Isbn'));
					
					if($conexion)
					{
						$palabras = PalabrasclavePeer::doSelect($conexion);
						foreach ($palabras As $temporal)
						{
							$temporal->delete();
						}
					}
					
					if($palabrasClave != '')
					{
						foreach($palabrasClave As $temporal)
						{
							$libroPalabraClave = new Palabrasclave();
							$libroPalabraClave->setIsbn($this->getRequestParameter('Isbn'));
							$libroPalabraClave->setIdpalabra($temporal);
							$libroPalabraClave->save();
						}
					}
					
					$conexion = new Criteria();
					$conexion->add(LibroautorPeer::ISBN, $this->getRequestParameter('Isbn'));
					
					if($conexion)
					{
						$libroAutores = LibroautorPeer::doSelect($conexion);
						foreach ($libroAutores As $temporal)
						{
							$temporal->delete();
						}
					}
					
					if($autores != '')
					{
						foreach($autores As $temporal)
						{
							$libroAutor = new Libroautor();
							$libroAutor->setIsbn($this->getRequestParameter('Isbn'));
							$libroAutor->setCodigoautor($temporal);
							$libroAutor->save();
						}
					}
				}
				catch (Exception $excepcionLibro)
				{
					return  $this->renderText("({success: false, errors: { reason: 'Exception: Problemas al actualizar el libro: ".$this->getRequestParameter('modNombre')."'}})");
				
				}
				return  $this->renderText("({success: true, mensaje:'El libro fue actualizado exitosamente'})");
		} else {
			return  $this->renderText("({success: false, errors: { reason: 'No se a actualizado el libro corecctamente'}})");
		}
	}

	public function executeEliminar()
	{
		$isbn = $this->getRequestParameter('Isbn');

		$conexion = new Criteria();
		$conexion->add(LibroPeer::ISBN, $isbn);
		if($conexion)
		{
			$libro = LibroPeer::doSelectOne($conexion);
			
			try
			{
				$libro->delete();
				
				$conexion = new Criteria();
				$conexion->add(LibroautorPeer::ISBN, $this->getRequestParameter('Isbn'));
				
				if($conexion)
				{
					$libroAutores = LibroautorPeer::doSelect($conexion);
					foreach ($libroAutores As $temporal)
					{
						$temporal->delete();
					}
				}
				
				$conexion = new Criteria();
				$conexion->add(PalabrasclavePeer::ISBN, $this->getRequestParameter('Isbn'));
				
				if($conexion)
				{
					$palabras = PalabrasclavePeer::doSelect($conexion);
					foreach ($palabras As $temporal)
					{
						$temporal->delete();
					}
				}
			}
			catch (Exception $excepcionLibro)
			{
				return  $this->renderText("({success: false, errors: { reason: 'Exception: No se pudo eliminar el libro'}})");
			}
		
			return  $this->renderText("({success: true, mensaje:'El libro fue eliminado exitosamente'})");
		}
		else
		{
			return  $this->renderText("({success: false, errors: { reason: 'No se pudo eliminar el libro'}})");
		}
	}
	
	public function executeListarEditoriales()
	{
		$buscar = $this->getRequestParameter('Busqueda');
		$buscar = "%".$buscar."%";
		$campo = $this->getRequestParameter('Campo');
		
		$conexion = new Criteria();
		$numeroEditoriales = EditorialPeer::doCount($conexion);
		$editoriales = EditorialPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($editoriales As $temporal)
		{
			$datos[$pos]['libroEditorialCodigoCombo']=$temporal->getCodigo();
			$datos[$pos]['libroEditorialNombreCombo']=$temporal->getNombre();
			//$datos[$pos]['editorialPaginaWeb']=$temporal->getPaginaweb();
			//$datos[$pos]['editorialPaisOrigen']=$temporal->getPaisorigen();
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroEditoriales.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function executeListarAutores()
	{
		$conexion = new Criteria();
		$numeroAutores = AutorPeer::doCount($conexion);
		$autores = AutorPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($autores As $temporal)
		{
			$datos[$pos]['libroAutorCodigoCombo']=$temporal->getCodigo();
			$datos[$pos]['libroAutorNombreCombo']=$temporal->getPrimerapellido().' '.$temporal->getSegundoapellido().' '.$temporal->getPrimernombre().' '.$temporal->getSegundonombre();
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroAutores.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function executeListarAutoresLibro()
	{
		$isbn = $this->getRequestParameter('Isbn');
		$pos = 0;
		$nbrows=0;
		$datos;
		
		$conexion = new Criteria();
		if($isbn != '')
		{
			$conexion->add(LibroautorPeer::ISBN, $isbn);
		}
		$numeroAutores = LibroautorPeer::doCount($conexion);
		$autores = LibroautorPeer::doSelect($conexion);
		
		foreach ($autores As $temporal)
		{
			$datos[$pos]['libroAutorCodigoCombo']=$temporal->getAutor()->getCodigo();
			$datos[$pos]['libroAutorNombreCombo']=$temporal->getAutor()->getPrimerapellido().' '.$temporal->getAutor()->getSegundoapellido().' '.$temporal->getAutor()->getPrimernombre().' '.$temporal->getAutor()->getSegundonombre();
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroAutores.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function executeListarPalabrasClave()
	{
		$conexion = new Criteria();
		$numeroPalabras = PalabraPeer::doCount($conexion);
		//$conexion->setLimit($this->getRequestParameter('limit'));
		//$conexion->setOffset($this->getRequestParameter('start'));
		$palabras = PalabraPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($palabras As $temporal)
		{
			$datos[$pos]['libroPalabraClaveCodigoCombo']=$temporal->getId();
			$datos[$pos]['libroPalabraClaveNombreCombo']=$temporal->getPalabra();
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroPalabras.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function executeListarPalabrasClaveLibro()
	{
		$isbn = $this->getRequestParameter('Isbn');
		$pos = 0;
		$nbrows=0;
		$datos;
		
		$conexion = new Criteria();
		if($isbn != '')
		{
			$conexion->add(PalabrasclavePeer::ISBN, $isbn);
		}
		$numeroPalabras = PalabrasclavePeer::doCount($conexion);
		$palabras = PalabrasclavePeer::doSelect($conexion);
		
		
		foreach ($palabras As $temporal)
		{
			$datos[$pos]['libroPalabraClaveCodigoCombo']=$temporal->getPalabra()->getId();
			$datos[$pos]['libroPalabraClaveNombreCombo']=$temporal->getPalabra()->getPalabra();
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroPalabras.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function executeListarAreasCononocimiento()
	{
		$buscar = $this->getRequestParameter('Busqueda');
		$buscar = "%".$buscar."%";
		$campo = $this->getRequestParameter('Campo');
		
		$conexion = new Criteria();
		$numeroAreasConocimiento = AreaconocimientoPeer::doCount($conexion);
		$areasConocimiento = AreaconocimientoPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($areasConocimiento As $temporal)
		{
			$datos[$pos]['libroAreaConocimientoCodigoCombo']=$temporal->getCodigo();
			//$datos[$pos]['areaConocimientoCodigoAreaConocimientoPadre']=$temporal->getCodigoareaconocimientopadre();
			$datos[$pos]['libroAreaConocimientoNombreCombo']=$temporal->getNombre();
			//$datos[$pos]['areaConocimientoDescripcion']=$temporal->getDescripcion();
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroAreasConocimiento.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
}
